/**
 * 
 * @param {*} arr 已排好的数组
 * @param {*} key 想要查找的值
 */

function binary_search(arr, key) {
  var low = 0,
    high = arr.length - 1;

  while (low <= high) {
    var mid = parseInt((high + low) / 2);
    if (key == arr[mid]) {
      return mid;
    } else if (key > arr[mid]) {
      low = mid + 1;
    } else if (key < arr[mid]) {
      high = mid - 1;
    } else {
      return -1;
    }
  }
}
const testArr = [2, 1, 10, 8, 5, 4, 3, 9, 6, 0, -1, -2, 2 * 1, 3 * -1, 1 - 5, 7, 1.1, 1.01]
testArr.sort((a, b) => {
  return a - b
})
console.log(testArr);
console.log(binary_search(testArr, 5));

// 这种是非递归方式，采用while方式，判断是否符合要求。


// * 优点：比较次数少，查找速度快，平均性能好。

// * 缺点：要求待查表为有序表，且插入删除困难。

// * 结论：适用于不经常变动而查找频繁的有序列表。